import apiClient from "@/axios/index.ts";
import request from './index'
import type { PageParam, AgvTask, AgvConfig, TableDataInfo, AjaxResult } from './types'

/**
 * 1. 系统配置相关接口
 */

/**
 * 获取系统配置
 */
export function getConfig(): Promise<AjaxResult<AgvConfig>> {
    return request({
        url: '/api/agv/config',
        method: 'get'
    })
}

/**
 * 更新系统配置
 * @param data
 */
export function updateConfig(data: AgvConfig): Promise<AjaxResult<any>> {
    return request({
        url: '/api/agv/config',
        method: 'put',
        data
    })
}


/**
 * 2. 故障缺陷管理相关接口
 */

// 获取缺陷列表
export function listFlaw(params: any) : Promise<TableDataInfo<any>> {
    return apiClient.get('/api/agv/flaw/list', {params});
}

// 获取缺陷详情
export function getFlaw(id: number | string) {
    return apiClient.get(`/api/agv/flaw/${id}`);
}

// 新增缺陷
export function addFlaw(data: any) {
    return apiClient.post('/api/agv/flaw', data);
}

// 更新缺陷
export function updateFlaw(data: any) {
    return apiClient.put('/api/agv/flaw', data);
}

// 删除缺陷
export function delFlaw(id: number | string) {
    return apiClient.delete(`/api/agv/flaw/${id}`);
}

// 轮询获取任务实时缺陷信息
export function liveInfo(id: number | string): Promise<TableDataInfo<any>> {
    return apiClient.get(`/api/agv/flaw/live/${id}`);
}

// 检查任务缺陷是否已全部确认
export function checkAllConfirmed(id: number | string) {
    return apiClient.get(`/api/agv/flaw/check/${id}`);
}

/**
 * ===== 本地数据库专用工具 =====
 * 在实时模式下（useDb=false）也可显式调用，避免自动 URL 重写
 */

export function upsertFlawDb(data: any) {
    return apiClient({
        url: '/api/agv/flaw/db',
        method: data?.id ? 'put' : 'post',
        data,
        headers: { 'X-Skip-Db-Sync': '1' }
    });
}

export function upsertConfigDb(data: any) {
    return apiClient({
        url: '/api/agv/config/db',
        method: 'put',
        data,
        headers: { 'X-Skip-Db-Sync': '1' }
    });
}

export function upsertTaskDb(data: any) {
    return apiClient({
        url: '/api/agv/task/db',
        method: data?.id ? 'put' : 'post',
        data,
        headers: { 'X-Skip-Db-Sync': '1' }
    });
}

/**
 * 3. AGV移动控制相关接口
 */

// 查询AGV心跳状态
export function heartbeat() {
    return apiClient.get('/api/agv/movement/heartbeat');
}

// 控制AGV向前移动
export function agvForward() {
    return apiClient.post('/api/agv/movement/forward');
}

// 停止AGV
export function agvStop() {
    return apiClient.post('/api/agv/movement/stop');
}

// 控制AGV向后移动
export function agvBackward() {
    return apiClient.post('/api/agv/movement/backward');
}


/**
 * 4. 系统检查相关接口
 */

// 检查文件系统可用性
export function checkFs(signal: AbortSignal) {
    return apiClient.get('/api/system/check/fs',
    {
        signal: signal
    }
    );

}

// 检查数据库连接
export function checkDb(signal: AbortSignal) {
    return apiClient.get('/api/system/check/db',
        {
            signal: signal
        });
}

// 检查AGV连接
export function checkAgv(signal: AbortSignal) {
    return apiClient.get('/api/system/check/agv',
        {
            signal: signal
        });
}

// 检查摄像头连接
export function checkCam(signal: AbortSignal) {
    return apiClient.get('/api/system/check/cam',
        {
            signal: signal
        });
}


/**
 * 5. 巡视任务管理相关接口
 */

/**
 * 获取任务列表
 * @param params
 */
export function listTask(params: PageParam & Partial<AgvTask>): Promise<TableDataInfo<AgvTask>> {
    return request({
        url: '/api/agv/task/list',
        method: 'get',
        params
    })
}

/**
 * 获取任务详情
 * @param id
 */
export function getTask(id: number | string): Promise<AjaxResult<AgvTask>> {
    return request({
        url: `/api/agv/task/${id}`,
        method: 'get'
    })
}

/**
 * 新建任务
 * @param data
 */
export function addTask(data: AgvTask): Promise<AjaxResult<any>> {
    return request({
        url: '/api/agv/task',
        method: 'post',
        data
    })
}

/**
 * 更新任务
 * @param data
 */
export function updateTask(data: AgvTask): Promise<AjaxResult<any>> {
    return request({
        url: '/api/agv/task',
        method: 'put',
        data
    })
}

/**
 * 删除任务
 * @param id
 */
export function delTask(id: number | string): Promise<AjaxResult<any>> {
    return request({
        url: `/api/agv/task/${id}`,
        method: 'delete'
    })
}

/**
 * 启动任务
 * @param id
 */
export function startTask(id: number | string): Promise<AjaxResult<any>> {
    return request({
        url: `/api/agv/task/start/${id}`,
        method: 'post'
    })
}

/**
 * 结束任务
 * @param id
 * @param isAbort
 */
export function endTask(id: number | string, isAbort: boolean): Promise<AjaxResult<any>> {
    return request({
        url: `/api/agv/task/end/${id}`,
        method: 'post',
        params: { isAbort }
    })
}

/**
 * 查询待上传的数据
 * @param id
 */
export function preUploadTask(id: number | string): Promise<AjaxResult<any>> {
    return request({
        url: `/api/agv/task/preupload/${id}`,
        method: 'get'
    })
}

/**
 * 上传任务数据
 * @param id
 */
export function uploadTask(id: number | string): Promise<AjaxResult<any>> {
    return request({
        url: `/api/agv/task/upload/${id}`,
        method: 'post'
    })
}